package com.ruoyi.common.utils;

import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 转换器工具
 *
 * @author caoxin
 *
 */
public class ConverterUtil {

	/**
	 * 转换
	 *
	 * @param <T>    源类型
	 * @param <R>    目标类型
	 * @param src    源对象(可以为null)
	 * @param mapper 映射
	 * @return 返回目标对象
	 */
	public static <T, R> R convert(T src, Function<T, R> mapper) {

		Objects.requireNonNull(mapper);
		if (src == null) {
			return null;
		}
		return mapper.apply(src);
	}

	/**
	 * 转换List
	 *
	 * @param <T>     源类型
	 * @param <R>     目标类型
	 * @param srcList 源List(可以为null)(元素也可以为null)
	 * @param mapper  映射
	 * @return 返回目标List
	 */
	public static <T, R> List<R> convertList(List<T> srcList, Function<T, R> mapper) {

		Objects.requireNonNull(mapper);
		if (srcList == null) {
			return null;
		}
		return srcList.stream().map(src -> convert(src, mapper)).collect(Collectors.toList());
	}

}
